package com.hucsmn.removeall;

import java.io.*;
import java.util.Scanner;

/**
 * 作业题二：
 * 实现将指定目录中的所有内容删除，包含子目录中的内容都要全部删除。
 */
public class RemoveAll {
    public static void main(String[] args) {
        if (args.length > 0) {
            for (String arg : args) {
                File file = new File(arg);
                remove(file);
            }
            return;
        }

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("请指定要删除的文件：");
            String line = sc.nextLine().trim();
            System.out.println("正在删除 '" + line + "' ...");
            File file = new File(line);
            if (remove(file)) {
                System.out.println("已删除 '" + line + "'。");
            }
        }
    }

    /**
     * 递归删除目录或文件。
     *
     * @param root 指定目录或文件。
     * @return 成功删除时返回真，否则返回假。
     */
    public static boolean remove(File root) {
        if (root == null || !root.exists()) {
            System.err.println("文件不存在：" + String.valueOf(root));
            return false;
        }

        if (root.isDirectory()) {
            File[] children;
            if ((children = root.listFiles()) == null) {
                System.err.println("无法访问：" + root.getPath());
                return false;
            }
            for (File child : children) {
                if (!remove(child)) {
                    return false;
                }
            }
        }

        if (!root.delete()) {
            System.err.println("无法删除：" + root.getPath());
            return false;
        }
        return true;
    }
}
